package com.zjdiepu.www.dao.base;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.zjdiepu.www.model.base.dto.SysPower;
import com.zjdiepu.www.model.base.ext.SysPowerExt;

/**
 * 菜单表dao层操作<br/>
 * @author xiongxiaotun<br/>
 * @time 2017年04月05日 15时24分<br/>
 * @since 1.0<br/>
 */
public interface SysPowerMapper {
	/**
	 * 主键删除
	 * @param id
	 * @return
	 */
	int deleteByPrimaryKey(String id);

	/**
	 * 添加记录
	 * 
	 * @param sysPower
	 * @return
	 */
	int insert(SysPower sysPower);

	/**
	 * 批量添加记录
	 * @param sysPowers
	 * @return
	 */
	int insertBatch(List<SysPower> sysPowers);

	/**
	 * 主键查询
	 * @param id
	 * @return
	 */
	SysPower selectByPrimaryKey(String id);

	/**
	 * 主键更新：只更新不是null值字段，字符串还要求trim()后长度不为0
	 * @param sysPower
	 * @return
	 */
	int updateByPrimaryKeySelective(SysPower sysPower);

	/**
	 * 主键更新
	 * @param sysPower
	 * @return
	 */
	int updateByPrimaryKey(SysPower sysPower);
	
	/**
	 * 条件查询
	 * @param sysPowerExt
	 * @return
	 */
	List<SysPower> selectByExt(SysPowerExt sysPowerExt);
	
	/**
	 * 条件统计
	 * @param sysPowerExt
	 * @return
	 */
	int countByExt(SysPowerExt sysPowerExt);
	
	/**
	 * 根据主键清除空字段，设置值为null
	 * @param fieldNames 字段名
	 * @param id 主键
	 */
	void clearEmpty(@Param("fieldNames")Set<String> fieldNames, @Param("id")String id);
	/**
	 * 查询用户权限
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月26日 上午1:13:36
	 * @since 1.0.0
	 * @update
	 * @param userName 登录用户名
	 * @return
	 */
	Set<String> selectByUserName(String userName);
	/**
	 * 查询用户权限
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月26日 上午1:13:36
	 * @since 1.0.0
	 * @update
	 * @param userId 用户ID
	 * @param menuStatus 是否菜单
	 * @param all 是否查询全部 true时 parentId条件作废
	 * @param parentId 父权限ID 只有all为false或为null时才启用
	 * @return
	 */
	List<SysPower> selectByUserIdAndParentId(@Param("userId")String userId, @Param("menuStatus")Integer menuStatus, @Param("all")Boolean all, @Param("parentId")String parentId);
	/**
	 * 查询用户拥有的快捷方式（必定为菜单）
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月26日 上午1:13:36
	 * @since 1.0.0
	 * @update
	 * @param userId 用户id
	 * @return
	 */
	List<SysPower> selectQuickByUserId(String userId);
	/**
	 * 查询角色权限
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月26日 上午1:13:36
	 * @since 1.0.0
	 * @update
	 * @param roleId 角色id
	 * @return
	 */
	List<SysPower> selectByRoleId(@Param("roleId")String roleId);
	/**
	 * 精确统计(=)
	 * @author xiongxiaotun
	 * @time 2017年04月08日 18时54分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	int countRefined(SysPower sysPower);
	/**
	 * 精确查询(=)
	 * @author xiongxiaotun
	 * @time 2017年04月08日 18时54分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	SysPower selectRefined(SysPower sysPower);
}